Some processors today contain a “micropartition” prefetch feature to accelerate virtualization. Prefetching is speculative loading of memory into cache before it is actually accessed. The micropartition prefetch feature saves a most recent cache address contents from a virtual central processing unit (VCPU) dispatch and triggers prefetch of the contents on the next dispatch of the VCPU. A virtual CPU, also known as a virtual processor, is a physical central processing unit CPU that is assigned to a virtual machine (VM).
The micropartition prefetch feature assumes that the cache contents of a VCPU are displaced by other VCPUs being dispatched over time. Micropartition prefetch performance analysis indicates that L3 cache misses are frequently resolved from other caches. Additionally, chip or “device” misses are misses resolved from other L2 or L3 caches on the same device. While some of the misses are natural data sharing from multi-VCPU workloads (VCPU sharing), others are likely a result of a VCPU being undispatched on one core on the device and then being redispatched on another core on the device in a reasonably short time.
A challenge found is that today's systems do not capture various cache miss details pertaining to VCPUs and, therefore, the device's hypervisor is unable to dynamically adjust its guidelines for future VCPU dispatch decisions, such as selecting which VCPU to dispatch an on which core to dispatch the VCPU.